{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "34qVD_ntSKLF"
   },
   "source": [
    "# Lightning Integration Basics\n",
    "\n",
    "The following notebook is equivalent to /parametric_programming/Part_1_basics.ipynb, but now showcasing the use of **PyTorch-Lightning** to simplify the user workflow. \n",
    "\n",
    "We will demonstrate the capability of learning to optimize (L2O)\n",
    "for solving [parametric nonlinear programming problem (pNLP)](https://en.wikipedia.org/wiki/Parametric_programming) defined as:\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "&\\text{minimize } &&  f(x, \\theta) \\\\\n",
    "&\\text{subject to} && g(x, \\theta) \\le 0\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "with  parameters $\\theta$ and decision variables $x$.\n",
    "\n",
    "In L2O train a neural network mapping problem parameters onto the primal decision variables $x = \\pi(\\theta)$ by using gradients of the optimizaiton problem to minimize the objective function and satisfy the constraints.\n",
    "\n",
    "### References\n",
    "[1] [F. Fioretto, et al., Predicting AC Optimal Power Flows: Combining Deep Learning and Lagrangian Dual Methods, 2019](https://arxiv.org/abs/1909.10461)  \n",
    "[2] [S. Gould, et al., Deep Declarative Networks: A New Hope, 2020](https://arxiv.org/abs/1909.04866)  \n",
    "[3] [P. Donti, et al., DC3: A learning method for optimization with hard constraints, 2021](https://arxiv.org/abs/2104.12225)  \n",
    "[4] [J. Kotary, et al., End-to-End Constrained Optimization Learning: A Survey, 2021](https://arxiv.org/abs/2103.16378)  \n",
    "[5] [M. Li, et al., Learning to Solve Optimization Problems with Hard Linear Constraints, 2022](https://arxiv.org/abs/2208.10611)  \n",
    "[6] [R. Sambharya, et al., End-to-End Learning to Warm-Start for Real-Time Quadratic Optimization, 2022](https://arxiv.org/abs/2212.08260)  \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "OCn3zpaIqgMc"
   },
   "source": [
    "## NeuroMANCER and Dependencies"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Qzy5Wot5k2Gf"
   },
   "source": [
    "### Install (Colab only)\n",
    "Skip this step when running locally."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "id": "X_3EvkSz0Fnz",
    "outputId": "23c06f6b-ab48-4763-c43c-40a325cacf87"
   },
   "outputs": [],
   "source": [
    "!pip install \"neuromancer[examples] @ git+https://github.com/pnnl/neuromancer.git@master\"\n",
    "!pip install lightning \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "LWyvndXlz0Fv"
   },
   "source": [
    "### Import"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(The user might need to install PyTorch Lightning). If so, please run \n",
    "\n",
    "```\n",
    "pip install lightning\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "id": "KbP0n-4evRqt"
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import neuromancer.slim as slim\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patheffects as patheffects\n",
    "import casadi\n",
    "import time\n",
    "import lightning.pytorch as pl \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "id": "POL27EJZxJmI"
   },
   "outputs": [],
   "source": [
    "from neuromancer.trainer import Trainer, LitTrainer\n",
    "from neuromancer.problem import Problem\n",
    "from neuromancer.constraint import variable\n",
    "from neuromancer.dataset import DictDataset\n",
    "from neuromancer.loss import PenaltyLoss\n",
    "from neuromancer.modules import blocks\n",
    "from neuromancer.system import Node\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Problem formulation\n",
    "\n",
    "In this example we will solve parametric constrained [Rosenbrock problem](https://en.wikipedia.org/wiki/Rosenbrock_function):\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "&\\text{minimize } &&  (1-x)^2 + a(y-x^2)^2\\\\\n",
    "&\\text{subject to} && \\left(\\frac{p}{2}\\right)^2 \\le x^2 + y^2 \\le p^2\\\\\n",
    "& && x \\ge y\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "with parameters $p, a$ and decision variables $x, y$.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Lightning Workflow\n",
    "\n",
    "The workflow when using Lightning consists of three parts: \n",
    "\n",
    "1. Defining a \"data_setup_function() -- this function should return 4 values (train, dev, test datasets, and batch size). The datasets should be named Neuromancer DictDatasets. \n",
    "2. Defining the Problem -- consisting of Nodes, System, Loss. \n",
    "3. Instantiating the PyTorch-Lightning -based Trainer (LitTrainer class)\n",
    "\n",
    "For this notebook, we assume all operations are done on the CPU. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "_WH7o7Wu1epw"
   },
   "source": [
    "### Lightning Dataset\n",
    "\n",
    "We constructy the dataset by sampling the parametric space."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "id": "_r6p2p6myHAh"
   },
   "outputs": [],
   "source": [
    "data_seed = 408  # random seed used for simulated data\n",
    "np.random.seed(data_seed)\n",
    "torch.manual_seed(data_seed)\n",
    "nsim = 5000  # number of datapoints: increase sample density for more robust results\n",
    "\n",
    "# create dictionaries with sampled datapoints with uniform distribution\n",
    "a_low, a_high, p_low, p_high = 0.2, 1.2, 0.5, 2.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "JZ9qrw0tlJhs"
   },
   "source": [
    "We define the **data_setup_function()** below. It randomly sample parameters from a uniform distribution: $0.5\\le p\\le2.0$;  $0.2\\le a\\le1.2$. It takes these parameters as inputs and outputs Neuromancer DictDatasets() for train, dev, and test data (or None type otherwise), as well as batch size (such as if we want to minibatch w.r.t time on the DictDatasets) We have hardcoded batch size to be 64 in this case. \n",
    "\n",
    "It is important to define both training and dev/validation datasets. Training datasets will be used for the training step; dev datasets will be used for model checkpointing (if desired)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "id": "Nu58M-8JyHy6"
   },
   "outputs": [],
   "source": [
    "\n",
    "def data_setup_function(nsim, a_low, a_high, p_low, p_high): \n",
    "\n",
    "    \n",
    "    samples_train = {\"a\": torch.FloatTensor(nsim, 1).uniform_(a_low, a_high),\n",
    "                    \"p\": torch.FloatTensor(nsim, 1).uniform_(p_low, p_high)}\n",
    "    samples_dev = {\"a\": torch.FloatTensor(nsim, 1).uniform_(a_low, a_high),\n",
    "                \"p\": torch.FloatTensor(nsim, 1).uniform_(p_low, p_high)}\n",
    "    samples_test = {\"a\": torch.FloatTensor(nsim, 1).uniform_(a_low, a_high),\n",
    "                \"p\": torch.FloatTensor(nsim, 1).uniform_(p_low, p_high)}\n",
    "    # create named dictionary datasets\n",
    "    train_data = DictDataset(samples_train, name='train')\n",
    "    dev_data = DictDataset(samples_dev, name='dev')\n",
    "    test_data = DictDataset(samples_test, name='test')\n",
    "\n",
    "    batch_size = 64\n",
    "\n",
    "    # Return the dict datasets in train, dev, test order, followed by batch_size \n",
    "    return train_data, dev_data, test_data, batch_size \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now define the **Problem()**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Y2htUaWMDjsk"
   },
   "source": [
    "## Primal Solution Map Architecture\n",
    "\n",
    "A neural network mapping problem parameters onto primal decision variables:  \n",
    "$$x = \\pi(\\theta)$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "id": "Ta_I_pjyyLzf"
   },
   "outputs": [],
   "source": [
    "# define neural architecture for the trainable solution map\n",
    "func = blocks.MLP(insize=2, outsize=2,\n",
    "                bias=True,\n",
    "                linear_map=slim.maps['linear'],\n",
    "                nonlin=nn.ReLU,\n",
    "                hsizes=[80] * 4)\n",
    "# wrap neural net into symbolic representation of the solution map via the Node class: sol_map(xi) -> x\n",
    "sol_map = Node(func, ['a', 'p'], ['x'], name='map')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Lxj77EFj7EO-"
   },
   "source": [
    "## Objective and Constraints in NeuroMANCER"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "id": "bcoVjphjyPp9"
   },
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "variable is a basic symbolic abstraction in Neuromancer\n",
    "   x = variable(\"variable_name\")                      (instantiates new variable)  \n",
    "variable construction supports:\n",
    "   algebraic expressions:     x**2 + x**3 + 5     (instantiates new variable)  \n",
    "   slicing:                   x[:, i]             (instantiates new variable)  \n",
    "   pytorch callables:         torch.sin(x)        (instantiates new variable)  \n",
    "   constraints definition:    x <= 1.0            (instantiates Constraint object) \n",
    "   objective definition:      x.minimize()        (instantiates Objective object) \n",
    "to visualize computational graph of the variable use x.show() method          \n",
    "\"\"\"\n",
    "\n",
    "# define decision variables\n",
    "x1 = variable(\"x\")[:, [0]]\n",
    "x2 = variable(\"x\")[:, [1]]\n",
    "# problem parameters sampled in the dataset\n",
    "p = variable('p')\n",
    "a = variable('a')\n",
    "\n",
    "# objective function\n",
    "f = (1-x1)**2 + a*(x2-x1**2)**2\n",
    "obj = f.minimize(weight=1.0, name='obj')\n",
    "\n",
    "# constraints\n",
    "Q_con = 100.  # constraint penalty weights\n",
    "con_1 = Q_con*(x1 >= x2)\n",
    "con_2 = Q_con*((p/2)**2 <= x1**2+x2**2)\n",
    "con_3 = Q_con*(x1**2+x2**2 <= p**2)\n",
    "con_1.name = 'c1'\n",
    "con_2.name = 'c2'\n",
    "con_3.name = 'c3'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 496
    },
    "id": "n7VPa9Wc8JRB",
    "outputId": "0da17c45-6370-4f46-f626-bd5686b94bfc"
   },
   "outputs": [],
   "source": [
    "# constrained optimization problem construction\n",
    "objectives = [obj]\n",
    "constraints = [con_1, con_2, con_3]\n",
    "components = [sol_map]\n",
    "\n",
    "# create penalty method loss function\n",
    "loss = PenaltyLoss(objectives, constraints)\n",
    "# construct constrained optimization problem\n",
    "problem = Problem(components, loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Define Lightning Modules and Training"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now instantiate the trainer and data modules as shown below. We will then train our Neuromancer **problem** on this data setup function using the **fit** function. The original problem will already have its weights updated. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "GPU available: True (cuda), used: False\n",
      "TPU available: False, using: 0 TPU cores\n",
      "IPU available: False, using: 0 IPUs\n",
      "HPU available: False, using: 0 HPUs\n",
      "/home/birm560/miniconda3/envs/neuromancer3/lib/python3.10/site-packages/lightning/pytorch/trainer/setup.py:187: GPU available but not used. You can set it by doing `Trainer(accelerator='gpu')`.\n",
      "/home/birm560/miniconda3/envs/neuromancer3/lib/python3.10/site-packages/lightning/pytorch/callbacks/model_checkpoint.py:639: Checkpoint directory ./ exists and is not empty.\n",
      "\n",
      "  | Name    | Type    | Params\n",
      "------------------------------------\n",
      "0 | problem | Problem | 19.8 K\n",
      "------------------------------------\n",
      "19.8 K    Trainable params\n",
      "0         Non-trainable params\n",
      "19.8 K    Total params\n",
      "0.079     Total estimated model params size (MB)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                           "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/birm560/miniconda3/envs/neuromancer3/lib/python3.10/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:441: The 'val_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=159` in the `DataLoader` to improve performance.\n",
      "/home/birm560/miniconda3/envs/neuromancer3/lib/python3.10/site-packages/lightning/pytorch/utilities/data.py:77: Trying to infer the `batch_size` from an ambiguous collection. The batch size we found is 64. To avoid any miscalculations, use `self.log(..., batch_size=batch_size)`.\n",
      "/home/birm560/miniconda3/envs/neuromancer3/lib/python3.10/site-packages/lightning/pytorch/trainer/connectors/data_connector.py:441: The 'train_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=159` in the `DataLoader` to improve performance.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 0: 100%|██████████| 79/79 [00:00<00:00, 126.64it/s, v_num=15, train_loss_step=0.903]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/birm560/miniconda3/envs/neuromancer3/lib/python3.10/site-packages/lightning/pytorch/utilities/data.py:77: Trying to infer the `batch_size` from an ambiguous collection. The batch size we found is 8. To avoid any miscalculations, use `self.log(..., batch_size=batch_size)`.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 0: 100%|██████████| 79/79 [00:01<00:00, 70.31it/s, v_num=15, train_loss_step=0.903, dev_loss=0.815, train_loss_epoch=5.690]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 0, global step 79: 'dev_loss' reached 0.81470 (best 0.81470), saving model to './epoch=0-step=79.ckpt' as top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1: 100%|██████████| 79/79 [00:00<00:00, 81.24it/s, v_num=15, train_loss_step=0.528, dev_loss=0.421, train_loss_epoch=0.881] "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 1, global step 158: 'dev_loss' reached 0.42123 (best 0.42123), saving model to './epoch=1-step=158.ckpt' as top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 2: 100%|██████████| 79/79 [00:00<00:00, 81.72it/s, v_num=15, train_loss_step=0.144, dev_loss=0.111, train_loss_epoch=0.286]  "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 2, global step 237: 'dev_loss' reached 0.11081 (best 0.11081), saving model to './epoch=2-step=237.ckpt' as top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 3: 100%|██████████| 79/79 [00:00<00:00, 87.08it/s, v_num=15, train_loss_step=0.228, dev_loss=0.187, train_loss_epoch=0.171]  "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 3, global step 316: 'dev_loss' was not in top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 4: 100%|██████████| 79/79 [00:00<00:00, 86.42it/s, v_num=15, train_loss_step=0.159, dev_loss=0.105, train_loss_epoch=0.147]  "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 4, global step 395: 'dev_loss' reached 0.10479 (best 0.10479), saving model to './epoch=4-step=395.ckpt' as top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 5: 100%|██████████| 79/79 [00:00<00:00, 88.72it/s, v_num=15, train_loss_step=0.103, dev_loss=0.140, train_loss_epoch=0.128]  "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 5, global step 474: 'dev_loss' was not in top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 6: 100%|██████████| 79/79 [00:00<00:00, 80.26it/s, v_num=15, train_loss_step=0.155, dev_loss=0.104, train_loss_epoch=0.138]  "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 6, global step 553: 'dev_loss' reached 0.10385 (best 0.10385), saving model to './epoch=6-step=553.ckpt' as top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 7: 100%|██████████| 79/79 [00:00<00:00, 83.75it/s, v_num=15, train_loss_step=0.110, dev_loss=0.0644, train_loss_epoch=0.120] "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 7, global step 632: 'dev_loss' reached 0.06439 (best 0.06439), saving model to './epoch=7-step=632-v1.ckpt' as top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 8: 100%|██████████| 79/79 [00:00<00:00, 79.68it/s, v_num=15, train_loss_step=0.140, dev_loss=0.0949, train_loss_epoch=0.124]  "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 8, global step 711: 'dev_loss' was not in top 1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 9: 100%|██████████| 79/79 [00:00<00:00, 86.22it/s, v_num=15, train_loss_step=0.142, dev_loss=0.0917, train_loss_epoch=0.146]  "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch 9, global step 790: 'dev_loss' was not in top 1\n",
      "`Trainer.fit` stopped: `max_epochs=10` reached.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 9: 100%|██████████| 79/79 [00:00<00:00, 84.98it/s, v_num=15, train_loss_step=0.142, dev_loss=0.0917, train_loss_epoch=0.146]\n"
     ]
    }
   ],
   "source": [
    "lit_trainer = LitTrainer(epochs=10, accelerator='cpu', patience=3)\n",
    "lit_trainer.fit(problem, data_setup_function, nsim=nsim,a_low=0.2, a_high=1.2, p_low=0.5, p_high=2.0)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Commentary\n",
    "\n",
    "The idea for PyTorch Lightning integration is to streamline the user experience such that the user can focus solely on the Problem and Data. Lightning emphasizes modularity; the aim here is to easily be able to swap out different problems and/or datasets, akin to running different experimental configurations. For example, we could easily procure different datasets by varying one of the data parameters (such as a_low) and easily fit our Problem to each of these datasets.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# After Training \n",
    "\n",
    "We can use the newly-trained Problem just as in the original version of the notebook: "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "0hhUw4PVBWmb"
   },
   "source": [
    "## Get pNLP solution from trained neural network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# selected problem parameters\n",
    "p = 1.0\n",
    "a = 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "os3I3I8L3HbE",
    "outputId": "50c13f99-7693-4102-b65c-4f3707f90c29"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7884852\n",
      "0.56312114\n"
     ]
    }
   ],
   "source": [
    "# Solution to mpNLP via Neuromancer\n",
    "datapoint = {'a': torch.tensor([[a]]), 'p': torch.tensor([[p]]),\n",
    "             'name': 'test'}\n",
    "model_out = problem(datapoint)\n",
    "x_nm = model_out['test_' + \"x\"][0, 0].detach().numpy()\n",
    "y_nm = model_out['test_' + \"x\"][0, 1].detach().numpy()\n",
    "print(x_nm)\n",
    "print(y_nm)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "g-KmqqUj-Q3E"
   },
   "source": [
    "## Get pNLP solution from CasADi for comparison\n",
    "\n",
    "[CasADi](https://web.casadi.org/) is an open-source tool for constrained optimization and optimal control that has influenced the development of NeuroMANCER."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "id": "dmJERFP2yYuC"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "******************************************************************************\n",
      "This program contains Ipopt, a library for large-scale nonlinear optimization.\n",
      " Ipopt is released as open source code under the Eclipse Public License (EPL).\n",
      "         For more information visit https://github.com/coin-or/Ipopt\n",
      "******************************************************************************\n",
      "\n",
      "This is Ipopt version 3.14.11, running with linear solver MUMPS 5.4.1.\n",
      "\n",
      "Number of nonzeros in equality constraint Jacobian...:        0\n",
      "Number of nonzeros in inequality constraint Jacobian.:        6\n",
      "Number of nonzeros in Lagrangian Hessian.............:        3\n",
      "\n",
      "Total number of variables............................:        2\n",
      "                     variables with only lower bounds:        0\n",
      "                variables with lower and upper bounds:        0\n",
      "                     variables with only upper bounds:        0\n",
      "Total number of equality constraints.................:        0\n",
      "Total number of inequality constraints...............:        3\n",
      "        inequality constraints with only lower bounds:        1\n",
      "   inequality constraints with lower and upper bounds:        0\n",
      "        inequality constraints with only upper bounds:        2\n",
      "\n",
      "iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls\n",
      "   0  1.0000000e+00 2.50e-01 1.67e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0\n",
      "   1  9.5811923e-01 2.49e-01 1.71e+01  -1.0 5.59e-01    -  5.26e-01 3.81e-02h  1\n",
      "   2  5.1823940e-01 1.40e-02 1.95e+01  -1.0 2.12e+01    -  1.25e-03 3.12e-02f  6\n",
      "   3  3.2701557e-01 0.00e+00 5.64e-01  -1.0 2.47e-01    -  1.00e+00 1.00e+00f  1\n",
      "   4  1.5594126e-01 0.00e+00 9.02e-01  -1.7 4.58e-01    -  3.11e-01 1.00e+00f  1\n",
      "   5  5.3473898e-02 0.00e+00 2.99e-01  -1.7 5.51e-01    -  1.00e+00 1.00e+00h  1\n",
      "   6  5.7915701e-02 0.00e+00 6.95e-03  -1.7 2.57e-02    -  1.00e+00 1.00e+00h  1\n",
      "   7  4.4884709e-02 0.00e+00 7.47e-03  -3.8 9.13e-02    -  8.77e-01 1.00e+00h  1\n",
      "   8  4.1207939e-02 0.00e+00 2.60e-04  -3.8 3.58e-02    -  1.00e+00 1.00e+00h  1\n",
      "   9  4.0921509e-02 0.00e+00 8.22e-07  -5.7 2.98e-03    -  1.00e+00 1.00e+00h  1\n",
      "iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls\n",
      "  10  4.0919039e-02 0.00e+00 7.11e-11  -8.6 2.53e-05    -  1.00e+00 1.00e+00h  1\n",
      "\n",
      "Number of Iterations....: 10\n",
      "\n",
      "                                   (scaled)                 (unscaled)\n",
      "Objective...............:   4.0919038633377619e-02    4.0919038633377619e-02\n",
      "Dual infeasibility......:   7.1118860800467587e-11    7.1118860800467587e-11\n",
      "Constraint violation....:   0.0000000000000000e+00    0.0000000000000000e+00\n",
      "Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00\n",
      "Complementarity.........:   2.6584596762648413e-09    2.6584596762648413e-09\n",
      "Overall NLP error.......:   2.6584596762648413e-09    2.6584596762648413e-09\n",
      "\n",
      "\n",
      "Number of objective function evaluations             = 18\n",
      "Number of objective gradient evaluations             = 11\n",
      "Number of equality constraint evaluations            = 0\n",
      "Number of inequality constraint evaluations          = 18\n",
      "Number of equality constraint Jacobian evaluations   = 0\n",
      "Number of inequality constraint Jacobian evaluations = 11\n",
      "Number of Lagrangian Hessian evaluations             = 10\n",
      "Total seconds in IPOPT                               = 0.043\n",
      "\n",
      "EXIT: Optimal Solution Found.\n",
      "      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval\n",
      "       nlp_f  |   1.74ms ( 96.72us) 202.69us ( 11.26us)        18\n",
      "       nlp_g  |   1.97ms (109.56us) 210.76us ( 11.71us)        18\n",
      "  nlp_grad_f  |   1.55ms (129.42us) 150.41us ( 12.53us)        12\n",
      "  nlp_hess_l  |   1.25ms (125.10us) 147.25us ( 14.73us)        10\n",
      "   nlp_jac_g  |   1.58ms (132.08us) 159.06us ( 13.25us)        12\n",
      "       total  | 709.78ms (709.78ms)  56.32ms ( 56.32ms)         1\n"
     ]
    }
   ],
   "source": [
    "# instantiate casadi optimizaiton problem class\n",
    "def NLP_param(a, p, opti_silent=False):\n",
    "    opti = casadi.Opti()\n",
    "    # define variables\n",
    "    x = opti.variable()\n",
    "    y = opti.variable()\n",
    "    p_opti = opti.parameter()\n",
    "    a_opti = opti.parameter()\n",
    "    # define objective and constraints\n",
    "    opti.minimize((1 - x) ** 2 + a_opti * (y - x ** 2) ** 2)\n",
    "    opti.subject_to(x >= y)\n",
    "    opti.subject_to((p_opti / 2) ** 2 <= x ** 2 + y ** 2)\n",
    "    opti.subject_to(x ** 2 + y ** 2 <= p_opti ** 2)\n",
    "    # select IPOPT solver and solve the NLP\n",
    "    if opti_silent:\n",
    "        opts = {'ipopt.print_level': 0, 'print_time': 0, 'ipopt.sb': 'yes'}\n",
    "    else:\n",
    "        opts = {}\n",
    "    opti.solver('ipopt', opts)\n",
    "    # set parametric values\n",
    "    opti.set_value(p_opti, p)\n",
    "    opti.set_value(a_opti, a)\n",
    "    return opti, x, y\n",
    "\n",
    "# construct casadi problem\n",
    "opti, x, y = NLP_param(a, p)\n",
    "# solve NLP via casadi\n",
    "sol = opti.solve()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "MvXjYHNjISrC",
    "outputId": "69a77f30-0ba5-411e-9d15-3cb7f15d9154"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x = 0.8081695826847699\n",
      "y = 0.588949838491767\n"
     ]
    }
   ],
   "source": [
    "print(f\"x = {sol.value(x)}\")\n",
    "print(f\"y = {sol.value(y)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "pcNq5fOVE4lR"
   },
   "source": [
    "## Compare: NeuroMANCER vs. CasADi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 281
    },
    "id": "kvYCfjq6zxxC",
    "outputId": "322e5b72-b93d-4d9e-a913-8703aad67d1a"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_373406/1714511162.py:21: MatplotlibDeprecationWarning: The collections attribute was deprecated in Matplotlib 3.8 and will be removed two minor releases later.\n",
      "  plt.setp(cg1.collections,\n",
      "/tmp/ipykernel_373406/1714511162.py:24: MatplotlibDeprecationWarning: The collections attribute was deprecated in Matplotlib 3.8 and will be removed two minor releases later.\n",
      "  plt.setp(cg2.collections,\n",
      "/tmp/ipykernel_373406/1714511162.py:27: MatplotlibDeprecationWarning: The collections attribute was deprecated in Matplotlib 3.8 and will be removed two minor releases later.\n",
      "  plt.setp(cg3.collections,\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7884852\n",
      "0.56312114\n"
     ]
    },
    {
     "data": {
      "image/png": "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IYQQBw8eFPPmzRPfffedKCoqEp9++qnIzs4WF198cWAdj8cjRo0aJWbNmiW2bt0qlixZIpKTk8WDDz7YprnV1tYKQNTW1rbPznYR6n5EFup+RBY9ZT+E6Dn70lP2o6exYMECYTAYxJtvvil2794t7rrrLhEXFydKS0uFEEL86Ec/Eg888EBg/Jo1a4RWqxXPPvus2LNnj3jssceETqcTO3bsCIx56qmnRFxcnPj000/F9u3bxVVXXSWysrKE3W4Pe14dJlAqKyvFTTfdJKKjo4XFYhG33367qK+vD7xfVFQkALFy5UohhBDFxcXi4osvFgkJCcJgMIhBgwaJ+++/v8kX+ciRI2LOnDnCZDKJpKQk8etf/1q43e42zc3hcIjHHntMOByO897PrkTdj8hC3Y/IoqfshxA9Z196yn70RF544QXRr18/odfrxaRJk8S6desC702bNk3ceuutQeM/+OADMWTIEKHX68XIkSPFokWLgt73+XzikUceEampqcJgMIiZM2eKffv2tWlOkhCdkDeloqKioqKiotIGelCXFRUVFRUVFZWegipQVFRUVFRUVCIOVaCoqKioqKioRByqQFFRUVFRUVGJOFSBoqKioqKiohJx9EiBUlVVxc0334zFYiEuLo477rgDq7XlLrXTp09HkqSg19133x00pri4mLlz52I2m0lJSeH+++/H00Ib787ej6qqKn7+858zdOhQTCYT/fr14xe/+EWgOaKfs/dTkiQWLFjQrnN/8cUXGTBgAEajkdzc3CYVgM/mww8/ZNiwYRiNRnJycli8eHHQ+0IIHn30UdLT0zGZTOTn53PgwIF2nXMo2rIfr7zyClOnTiU+Pp74+Hjy8/ObjL/tttuaHPuCgoKO3o027cebb77ZZI5nV7fsDucj1G9akiTmzp0bGNMV5+Obb77hiiuuICMjA0mSAg3WWmLVqlVccMEFGAwGBg0axJtvvtlkTFt/c+dLW/fjo48+4tJLLyU5ORmLxUJeXh5ffvll0JjHH3+8yfkYNmxYB+6FSkRzTgnTEU5BQYEYM2aMWLdunfj222/FoEGDgorEhWLatGnizjvvFCdPngy8Gtdg8ReJy8/PF1u2bBGLFy8WSUlJbS4S15H7sWPHDnHttdeKhQsXioMHD4rly5eLwYMHi+9973tB4wDxxhtvBO1rW4rntMaCBQuEXq8X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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\"\"\"\n",
    "Plots\n",
    "\"\"\"\n",
    "x1 = np.arange(-0.5, 1.5, 0.02)\n",
    "y1 = np.arange(-0.5, 1.5, 0.02)\n",
    "xx, yy = np.meshgrid(x1, y1)\n",
    "\n",
    "# eval objective and constraints\n",
    "J = (1 - xx) ** 2 + a * (yy - xx ** 2) ** 2\n",
    "c1 = xx - yy\n",
    "c2 = xx ** 2 + yy ** 2 - (p / 2) ** 2\n",
    "c3 = -(xx ** 2 + yy ** 2) + p ** 2\n",
    "\n",
    "fig, ax = plt.subplots(1, 1)\n",
    "cp = ax.contourf(xx, yy, J,\n",
    "                 levels=[0, 0.05, 0.2, 0.5, 1.0, 2.0, 4.0, 6.0, 8.0],\n",
    "                 alpha=0.6)\n",
    "fig.colorbar(cp)\n",
    "ax.set_title('Rosenbrock problem')\n",
    "cg1 = ax.contour(xx, yy, c1, [0], colors='mediumblue', alpha=0.7)\n",
    "plt.setp(cg1.collections,\n",
    "         path_effects=[patheffects.withTickedStroke()], alpha=0.7)\n",
    "cg2 = ax.contour(xx, yy, c2, [0], colors='mediumblue', alpha=0.7)\n",
    "plt.setp(cg2.collections,\n",
    "         path_effects=[patheffects.withTickedStroke()], alpha=0.7)\n",
    "cg3 = ax.contour(xx, yy, c3, [0], colors='mediumblue', alpha=0.7)\n",
    "plt.setp(cg3.collections,\n",
    "         path_effects=[patheffects.withTickedStroke()], alpha=0.7)\n",
    "\n",
    "# Solution to mpNLP via Neuromancer\n",
    "datapoint = {'a': torch.tensor([[a]]), 'p': torch.tensor([[p]]),\n",
    "             'name': 'test'}\n",
    "model_out = problem(datapoint)\n",
    "x_nm = model_out['test_' + \"x\"][0, 0].detach().numpy()\n",
    "y_nm = model_out['test_' + \"x\"][0, 1].detach().numpy()\n",
    "print(x_nm)\n",
    "print(y_nm)\n",
    "\n",
    "# plot optimal solutions CasADi vs Neuromancer\n",
    "ax.plot(sol.value(x), sol.value(y), 'g*', markersize=10, label='CasADi')\n",
    "ax.plot(x_nm, y_nm, 'r*', fillstyle='none', markersize=10, label='NeuroMANCER')\n",
    "plt.legend(bbox_to_anchor=(1.0, 0.15))\n",
    "plt.show(block=True)"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "neuromancer",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
